"""
列表可以被修改，但如果我不想要数据被修改怎么办
这个就是 元组 ，相当于只读的列表
注意 元组 不能 1插入 2追加 3修改 元素数据
元组和列表的操作基本相同 注意括号的区别 和 一些小细节就好
"""
# 定义元组 元组用小括号  注意列表的方括号的区别
元组1 = (1, 'wodd', 992.33, True)
元组2 = ()
元组3 = tuple()
print(f'元组1的类型是：{type(元组1)}', f'元组1的内容是：{元组1}')
print(f'元组2的类型是：{type(元组2)}', f'元组2的内容是：{元组2}')
print(f'元组3的类型是：{type(元组3)}', f'元组3的内容是：{元组3}')

元组4 = ('我i')  # 注意单个元素也要加一个 逗号,  不然不是元组了
print(f'元组4的类型是：{type(元组4)}', f'元组4的内容是：{元组4}')
元组4 = ('我i',)  # 注意单个元素也要加一个 逗号,  不然不是元组了
print(f'元组4的类型是：{type(元组4)}', f'元组5的内容是：{元组4}')

# 元组和列表一样也可以嵌套
元组5 = (3, (1, 2, 3), (11, 22, 33))
print(f'元组5的类型是：{type(元组5)}', f'元组1的内容是：{元组5}', '\n')

# 读取元组 元素，和列表一样操作
元素 = 元组5[1][2]  # 读取 元组5 里， 33 这个值。 否则报错
print(f'从嵌套元组里读取的值是：{元素}')

# 查找元组里某个 值 ，如果存在返回元素的引索值
元组 = (1, 3, 3, 5, 3, 7, 8, 3)
索引值 = 元组.index(3)   # 只搜索到第一给匹配的值
print(f'搜索的元素的索引值是：{索引值}')

# 统计某个元素在元组的出现次数
元组 = (1, 3, 3, 5, 3, 7, 8, 3)
次数 = 元组.count(3)
print(f'搜索的元素的出现的次数是：{次数}')

# 统计元组元素个数
统计 = len(元组)
print(f'统计元组元素个数是：{统计}')

# 利用循环遍历 元组元素  2种循环方法
元组 = (1, 3, 3, 5, 3, '儿童')
引索值 = 0
while 引索值 < len(元组):  # len 是查看列表有多少个元素
    print(f'元素列表引索{引索值}的元素是：', 元组[引索值])
    引索值 += 1
print()

元组5 = (3, (1, 2, 3), (11, 22, 33))
引索值 = 0
for 临时变量 in 元组5:
    print(f'元素列表引索{引索值}的元素是：{临时变量}')
    引索值 += 1
print()

# 元组里的数据是只读不能修改，但是如果元组里有嵌套 列表 的情况，这个列表里的数据是可以修改的
元组 = (3, [1, 2, 3], (11, 22, 33))  # 元组里嵌套 列表
元组[1][0] = '我i爱'
print(f'修改后的元组元素是：{元组}')
# 同样如果列表里嵌套 元组 ，这个元组里的数据不能修改
列表 = [6, 9, (4, 7, 8)]
# 列表[2][0] = '机会'  # 回报错 嵌套的元组不能修改
列表[1] = '机会'
print(f'修改后的列表：{列表}')

# 列表里嵌套的元组可以删除，但是元组里嵌套的列表不能删除
del 列表[2]
print(f'删除了列表嵌套的元组：{列表}')
print()

# del 元组[2]  # 元组里嵌套的列表不能删除不然报错

# 元组.append('追加的元素7')   # 元组不能追加元素，不然报错

# 元组.insert(2, '第三插入3')    # 同样元组不能插入，不然报错

print("小练习")
# 小练习
姓名元组 = ('孙新罡', 37, ['做爱', '读书'])
下标 = 姓名元组.index(37)
print(f'姓名元组里的年龄下标是： {下标}')
del 姓名元组[2][0]
print(f"姓名元组里删除了'做爱''： {姓名元组}")
# 元组里嵌套了列表，我们看这个列表在元组里 索引号 是多少。
姓名元组[2].append('学习')   # 列表在元组的下标是 2 ，所以这个 姓名元组[2] 就代表这个列表了
print(f"姓名元组里嵌套的列表追加元素： {姓名元组}")
姓名元组[2].insert(0, '思考')
print(f"姓名元组里嵌套的列表插入元素： {姓名元组}")
print()
